const { Op } = require('sequelize')
const { EvaluateModel, PropertyModel, UserModel } = require('../../models/index')


// 获取用户评价记录
const getRateInfo = async (req, res) => {
  try {
    // 获取页码和每页大小
    const { pageSize, page } = req.query

    // 确保页码和每页大小是有效的数字
    if (isNaN(parseInt(pageSize, 10)) || isNaN(parseInt(page, 10)) || pageSize < 0 || page < 0) {
      return res.status(400).json({ error: '无效的页码或每页大小' })
    }

    // 计算offset
    const offset = (parseInt(page, 10) - 1) * parseInt(pageSize, 10)

    // 查找用户的评价记录
    const evaluateInfo = await EvaluateModel.findAndCountAll({
      include: [
        {
          model: UserModel,
          as: 'user',
          attributes: ['id', 'username']
        }, {
          model: PropertyModel,
          as: 'property',
          attributes: ['id', 'title', 'image_url']
        }
      ],
      order: [
        ['createdAt', 'DESC']
      ],
      offset: offset,
      limit: parseInt(pageSize, 10)
    })

    // 没有找到评价信息的情况
    if (evaluateInfo.length === 0) {
      return res.status(404).json({ error: '没有找到预约信息！' })
    }

    // 返回评价信息查找成功时的响应
    res.status(200).json({
      title: '查询成功',
      data: evaluateInfo
    })

  } catch (error) {
    return res.status(500).json({ error: error.message })
  }
}

// 删除用户评论记录
const deleteRate = async (req, res) => {
  try {
    // 获取评论记录ID
    const id = req.params.id

    // 评论记录ID为空的情况
    if (!id) {
      return res.status(400).json({ error: '评论记录ID不能为空' })
    }

    const rateItem = await EvaluateModel.findByPk(id)

    // 没有找到预约记录的情况
    if (!rateItem) {
      return res.status(404).json({ error: '没有找到该评论记录！' })
    }

    // 删除评论记录
    const delRateInfo = await rateItem.destroy()

    // 删除成功的响应
    res.status(200).json({
      title: '删除成功',
      message: '该评论记录已经成功删除！'
    })
  } catch (error) {
    return res.status(500).json({ error: error.message })
  }
}

// 获取用户评论总数
const rateCount = async (req, res) => {
  try {
    const rateCountValue = await EvaluateModel.count()

    // 统计成功返回响应
    res.status(200).json({
      title: '用户评论总数',
      data: rateCountValue
    })

  } catch (error) {
    res.status(500).json({ error: error.message })
  }
}

// 搜索用户评论
const searchRate = async (req, res) => {
  try {
    // 获取用户输入的搜索词
    const searchText = req.query.data

    // 如果搜索词为空返回空数组
    if (!searchText || searchText.trim() === '') {
      return res.status(200).json([])
    }

    // 搜索匹配内容
    const orderItem = await EvaluateModel.findAll({
      where: {
        [Op.or]: [
          { rating: { [Op.like]: `%${searchText}%` } },
          { comment: { [Op.like]: `%${searchText}%` } },
        ]
      },
      include: [
        {
          model: UserModel,
          as: 'user',
          attributes: ['id', 'username']
        }, {
          model: PropertyModel,
          as: 'property',
          attributes: ['id', 'title', 'image_url']
        }
      ]
    })

    // 返回查询结果
    return res.status(200).json({
      title: '搜索成功',
      data: orderItem
    })

  } catch (error) {
    res.status(500).json({ error: error.message })
  }
}

module.exports = {
  getRateInfo,
  deleteRate,
  rateCount,
  searchRate
}